<?php

namespace Modules\Admin\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules\Password;
use Modules\Admin\Entities\Admin;

class InfoRequest extends FormRequest
{
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {

        $id = auth()->guard('admin')->user()->id;
        switch (true) {

                //        'username' => "string|between:1,50|unique:admins,username,$id,id,deleted_at,NULL",
            case $this->routeIs('api.admin.info.update'):
                return [
                    'username' => [
                        'string', 'between:1,16', Rule::unique(
                            Admin::getTableName(),
                            'username'
                        )->where(
                            'id',
                            $id
                        )->whereNull('deleted_at'),

                        Rule::unique(Admin::getTableName())
                            ->where(function ($query) use ($id) {
                                return $query->where('id', '<>', $id);
                            })
                            ->whereNull('deleted_at'),
                    ],
                    'name' => ['string', 'between:1,10'],
                ];
            case $this->routeIs('api.admin.info.password.update'):
                return [
                    'old_password' => [
                        'required', 'string', 'between:6,16',
                        Password::min(6)
                            ->letters() //使密码至少需要一个字母。
                            ->numbers() //使密码至少需要一个数字。
                            ->mixedCase() //使密码至少需要一个大写和一个小写字母。
                            ->symbols() //使密码至少需要一个符号。
                        // ->uncompromised()//确保密码没有在数据泄露中被泄露。
                    ],
                    'new_password' => [
                        'required', 'confirmed', 'string', 'between:6,16',
                        Password::min(6)
                            ->letters() //使密码至少需要一个字母。
                            ->numbers() //使密码至少需要一个数字。
                            ->mixedCase() //使密码至少需要一个大写和一个小写字母。
                            ->symbols() //使密码至少需要一个符号。
                        // ->uncompromised() //确保密码没有在数据泄露中被泄露。
                    ],
                    'new_password_confirmation' => [
                        'required', 'string', 'between:6,16',
                        Password::min(6)
                            ->letters() //使密码至少需要一个字母。
                            ->numbers() //使密码至少需要一个数字。
                            ->mixedCase() //使密码至少需要一个大写和一个小写字母。
                            ->symbols() //使密码至少需要一个符号。
                        // ->uncompromised() //确保密码没有在数据泄露中被泄露。
                    ],
                ];
        }
        return [
            //
        ];
    }

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }
}
